package cn.bearspark.happening.provider.dao.mapper;

import cn.bearspark.framework.redis.starter.buffer.hash.bi.BiQO;
import cn.bearspark.framework.redis.starter.buffer.hash.bi.RedisBiHashMapper;
import cn.bearspark.happening.dto.vote.Option4Publish;
import cn.bearspark.happening.provider.dao.co.VoteOptionCO;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Set;

/**
 * 投票选项的数据映射接口
 *
 * @author f
 */
@Mapper
public interface VoteOptionMapper extends RedisBiHashMapper<VoteOptionCO> {

    /**
     * 批量添加投票选项数据
     *
     * @param voteId     投票的 id
     * @param optionList 投票选项数据
     * @param voteType   投票的类型
     */
    void insertBatch(long voteId, List<Option4Publish> optionList, int voteType);

    /**
     * 增加指定投票的指定选项的选中数
     *
     * @param voteId       指定的投票 id
     * @param optionIdList 指定的选项 id 集合
     */
    void incrSelectNum(long voteId, List<Integer> optionIdList);

    /**
     * 查询指定投票选项的热数据
     *
     * @param biQOSet 查询对象的 Set 集合
     * @return 指定投票选项缓存对象的热数据
     */
    @Override
    List<VoteOptionCO> listHotData(Set<BiQO> biQOSet);

    /**
     * 查询指定投票选项的数据
     *
     * @param biQOSet 查询对象的 Set 集合
     * @return 指定投票选项的数据
     */
    @Override
    List<VoteOptionCO> listData(Set<BiQO> biQOSet);

    /**
     * 查询指定投票的所有选项 id
     *
     * @param voteId 指定的投票 id
     * @return 指定投票的所有选项 id
     */
    @Select("SELECT option_id FROM t_vote_option WHERE vote_id = #{voteId}")
    List<Integer> listOptionId(long voteId);

    /**
     * 删除指定的投票选项信息
     *
     * @param voteId 指定的投票 id
     */
    @Delete("DELETE FROM t_vote_option WHERE vote_id = #{voteId}")
    void deleteByVoteId(long voteId);

    /**
     * 获取指定投票的图片路径，仅用于删除指定的投票
     *
     * @param voteId 指定的投票 id
     * @return 指定投票的图片路径集合
     */
    @Select("SELECT option_photo_url FROM t_vote_option WHERE vote_id = #{voteId}")
    List<String> listPhotoUrlByVoteId(long voteId);
}
